<script type="text/javascript">

function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} 
	
function reConstructBinaryTree(pre, vin)
{
	if(pre.length < 1) return null;
    // 找到前序遍历的第一个数，表示根节点
    let root = pre[0];
    // 创建新的结点
    let node = new TreeNode(root);
    // 在中序遍历中找到根节点，从而得到两组数组（先序遍历，中序遍历数组）
    let rootIndexInVin = vin.indexOf(root);
    let vinLeft = vin.slice(0, rootIndexInVin),
        vinRight = vin.slice(rootIndexInVin+1);
    let preLeft = pre.slice(1, vinLeft.length+1),
        preRight = pre.slice(vinLeft.length+1);
    // 递归设置左右子节点
    node.left = reConstructBinaryTree(preLeft, vinLeft);
    node.right = reConstructBinaryTree(preRight, vinRight);
    return node;
}

const res = reConstructBinaryTree([1,2,4,7,3,5,6,8], [4,7,2,1,5,3,8,6]);
console.log(res)

</script>